Electronic consumer devices (for example, televisions, radios, digital video disk (DVD) players, video cassette recorders (VCRs), sound systems, home entertainment systems, video game controllers, set-top boxes, personal computers) and home appliances (for example, ceiling fans, lights, alarm systems, garage door openers, kitchen appliances, heating controls) are often controllable by one or more remote control devices. Such a remote control device is often a handheld device with a set of keys and a transmitter (for example, an infrared (IR) transmitter).
Each device to be controlled recognizes and responds to a particular set of incoming codes communicated on a carrier. Information describing one such set of codes is sometimes called a codeset. A particular television may, for example, respond to codes of one codeset, whereas a particular DVD player may respond to codes of a different codeset. One or more codesets are therefore typically stored on a remote control device so that the remote control device can control one or more types of devices.
The format in which such codeset information is stored on a remote control device is typically compressed so that it consumes as little memory space as is practical. The format of the compacted information may be proprietary and/or may be difficult to decipher to one not aware of the format. Not only can the codeset information be difficult to decipher, but the mechanism used to read the codeset information and to generate the actual code transmitted can also be difficult to decipher. The mechanism may, for example, involve machine code that exercises function-specific hardware. The mechanism on a first type of remote control device may differ from the mechanism performing the same function on a second type of remote control device. For these and other reasons, the programming of remote control devices can be quite involved and can involve accessing proprietary information. It generally requires the knowledge of the hardware platform of the remote control device. There are different types of remote control devices, and code from one remote control device cannot simply be transferred to another type of remote control device.
Some remote control devices are relatively expensive devices that have a significant amount of processing power, memory and other hardware resources. A typical cell phone is one such device that has substantial resources and that executes an operating system. A typical personal digital assistant (PDA) is another such device that has substantial resources and has an operating system.
In one example, the PDA executes the PalmOS operating system and is a Java Virtual Machine (JVM). The JVM provides just-in-time interpretation of Java bytecode scripts into native machine code. The PDA provides the hardware and other functionality to support a standard set of Java application programming interfaces (API). When the Java bytecode is interpreted, the resulting native machine code may call an API such that the API returns values or causes certain functions to be performed. If two JVM PDAs both support the same set of APIs, then a Java bytecode script that uses these Java APIs can be made to run on both platforms without modification.
Although the JVM and PalmOS scripting language and interpreter mechanism may be appropriate for certain classes of expensive platforms like PDAs, the JVM and PalmOS mechanism consumes too much memory and processor resources to be used on other classes of platforms. The sale price of many remote control devices is extremely cost sensitive. A remote control device may, for example, be provided with an electronic consumer device and may almost be a throw-away device. A processor that is as inexpensive as practical is used to implement remote control functionality. The amount of both program memory and data memory included is kept as low as possible and is typically a fraction of the amount of program memory and data memory available in a PDA. In the class of inexpensive remote control devices, there is typically no operating system. The programming of the processor is often handcrafted to reduce the amount of memory space consumed. Codeset information needed to generate codes to operate electronic consumer devices is generally compressed and stored in obscure memory-efficient formats. A program in such a remote control device cannot therefore be ported from one type of device to another. The program is generally not easily understandable by anyone not intimately familiar with the way the code was written and the particular hardware platform on which it operates. A novel scripting language and associated script interpreter are sought, whereby the interpreter interprets scripts into machine code of a processor in a microcontroller of limited memory and computing power.